package com.yfp.machine.service;

import com.yfp.common.core.domain.R;
import com.yfp.machine.domain.Machine;
import com.yfp.machine.domain.dto.MachineAnalysisDto;
import com.yfp.machine.domain.dto.MachineDto;
import com.yfp.machine.domain.dto.PositionMachine;
import com.yfp.machine.domain.vo.MachineVo;

import java.util.Date;
import java.util.List;

/**
 * (Machine)表服务接口
 *
 * 
 * @since 2023-12-11 17:38:58
 */
public interface MachineService {

    /**
     * 根据设备id查询设备信息
     *
     * @param machineId 机器id
     * @return {@link MachineDto}
     */
    MachineDto queryMachineInfoById(String machineId);


    /**
     * 修改数据
     *
     * @param machine 实例对象
     * @return 实例对象
     */
    Machine update(Machine machine);


    /**
     * 新增设备
     *
     * @param machineVo 机器vo
     * @return {@link R}<{@link Object}>
     */
    R<Object> newAdditionMachine(MachineVo machineVo);


    /**
     * 分页查询数据
     *
     * @param machine 机器
     * @return {@link List}<{@link MachineDto}>
     */
    List<Machine> pagingQueryData(Machine machine);

    /**
     * 更新设备信息
     *
     * @param machine 机器
     * @return {@link R}<{@link Object}>
     */
    R<Object> updateByMachine(Machine machine);


    /**
     * 禁用设备
     *
     * @param id id
     * @return {@link Machine}
     */
    Machine disabledByMachineId(String id);


    /**
     * 加载参数缓存数据
     */
    void loadingConfigCache();

    /**
     * 清空参数缓存数据
     */
    void clearConfigCache();

    /**
     * 重置参数缓存数据
     */
    void resetConfigCache();

    /**
     * 按机器id重新启动
     *
     * @param id id
     * @return boolean
     */
    boolean restartByMachineId(String id);

    /**
     * 查询在线/离线设备
     *
     * @param machine 机器
     * @return {@link Object}
     */
    Object queryOnlineMachine(Machine machine);

    /**
     * 通过点位ID获取设备标签获取设备列表
     *
     * @param positionId 位置id
     * @return {@link List}<{@link PositionMachine}>
     */
    List<PositionMachine> machineListByPositionIdOrMachineTag(String positionId, String machineTag, String machineName, String machineId, Integer machineType,String cityName);

    /**
     * 设备分析
     *
     * @param positionId 点位id
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @param cityName
     * @return {@link MachineAnalysisDto}
     */
    List<MachineAnalysisDto> machineAnalysis(String positionId, Date startTime, Date endTime, String cityName);


    Machine getMachineById(String machineId);

    List<String> getMachineNamesByMachineIds(List<String> machineIds);

    List<String> queryMachineIdsByMachineName(String machineName);

    void setMachineDtorelatedData(MachineDto machineDto);

    /**
     * 获取企业可关联的设备
     * @param machineType
     * @return
     */
    List<PositionMachine> findEnterpriseMachine(Integer machineType);

    /**
     * 播放地址
     * @param serialNumber
     * @return
     */
    R<String> playback(String serialNumber);
}

